"""
    python 多线程爬虫学习

    实现多线程的两种方法：
        1.实例化 Thread
        2.继承 Thread 类
"""

import time
from threading import Thread


def sleep_task(sleep_time):
    print("sleep {} seconds start!".format(sleep_time))
    time.sleep(sleep_time)
    print("sleep {} seconds end!".format(sleep_time))


# 继承 Thread 类
class SleepThread(Thread):
    def __init__(self, sleep_time):
        self.sleep_time = sleep_time
        super().__init__()  # 调用父类的初始化方法

    # 重载原有的 run() 方法
    def run(self):
        print("sleep {} seconds start!".format(self.sleep_time))
        time.sleep(self.sleep_time)
        print("sleep {} seconds end!".format(self.sleep_time))


if __name__ == "__main__":
    """
    通过实例化 Thread 调用线程
    """
    start_time = time.time() # 记录开始时间

    # 这里 target 绝对不能加 ()
    # t1 = Thread(target=sleep_task)

    # 线程传递参数
    t1 = Thread(target=sleep_task, args=(2,))
    # t1.setDaemon(True)  # 设置为守护主线程，在主线程执行完成后，子线程跟着退出
    t1.start()

    t2 = Thread(target=sleep_task, args=(4,))
    # t2.setDaemon(True)  # 设置为守护主线程，在主线程执行完成后，子线程跟着退出
    t2.start()

    # 两个join是为了方便计算时间
    t1.join()  # t1 运行完成后才会执行之后的逻辑
    t2.join()  # t2 运行完成后才会执行之后的逻辑

    time.sleep(1)

    end_time = time.time() # 记录结束时间
    print("time changed(seconds): {}".format( int(end_time - start_time) ))


# if __name__ == "__main__":
#     """
#     继承 Thread 类
#     """
#     t1 = SleepThread(2)
#     t2 = SleepThread(4)
#     t1.start()
#     t2.start()
